package eu.tanov.epf.pv.types.project.common.util;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

public class ProjectFactorConstants {
	// Software classification
	public static String[] Project_Nature = new String[] { "Greenfield", "Maintenance", "Legacy system evolution", "Enhancement", "Replacement" };
	public static String[] Product_Type = new String[] { "Web application", "embedded system", "desktop application" };
	public static String[] Project_Type = new String[] { "Product-line", "end user application", "component development", "web service development" };
	// Project specific
	public static String[] Project_Size = new String[] { "Small", "medium", "large" };
	public static String[] Number_of_Instances = new String[] { "1", "<10", "dozens", "hundreds", "thousands", "more" };
	public static String[] Criticality = new String[] { "Loss of comfort", "loss of money", "loss of essential money", "loss of life" };
	public static String[] Constraints = new String[] { "fixed-price contracts", "fixed delivery dates", "staffing and team size limitations",
			"performance or response time constraints", "memory utilization or storage constraints", "safety-critical", "reliability constraints",
			"security constraints", "platform constraints", "other" };
	// Development methodology
	public static String[] Iterative_Process = new String[] { "Yes", "No", "Partly" };
	public static String[] Iterative_Delivery = new String[] { "Yes", "No", "Partly" };
	public static String[] Development_Method = new String[] { "agile&adaptive", "waterfall", "spiral", "ad-hoc" };
	public static String[] Formal_Documentation = new String[] { "Yes", "No", "Partly" };
	public static String[] Formal_Procedures = new String[] { "Yes", "No", "Partly" };
	// Team
	public static String[] Team_Size = new String[] { "1-5", "6-10", "11-15", "16-20", "21-50", ">50" };
	public static String[] Number_of_Teams = new String[] { "1", "2-4", "5-8", ">8" };
	public static String[] Competency_of_the_Team = new String[] { "High", "Medium", "Low" };
	public static String[] Commitment_of_Team_Members = new String[] { "High", "Medium", "Low" };
	public static String[] Commitment_of_the_Customer = new String[] { "High", "Medium", "Low" };
	public static String[] Specialization_of_Team_Members = new String[] { "High", "Medium", "Low" };
	// Managerial
	public static String[] Contract_Type = new String[] { "time-based", "feature-based", "cost-based" };
	public static String[] Communication_In_Team = new String[] { "face-to-face communication", "informal written communication",
			"formal written communication", "various types of video and voice conferencing" };
	public static String[] Communication_With_Client = new String[] { "face-to-face communication", "informal written communication",
			"formal written communication", "various types of video and voice conferencing" };
	public static String[] Project_Progress_Tracking = new String[] { "formal reports", "informal reports", "working software" };
	public static String[] Standards = new String[] { "Management standards", "Development standards", "other" };

	public static Map<String, String[]> map = null;

	public static Map<String, String[]> getMap() {
		try {
			if (map == null) {
				map = new HashMap<String, String[]>();
				Field[] fields = ProjectFactorConstants.class.getFields();
				for (Field field : fields) {
					if (field.get(null) instanceof String[]) {
						String[] value = (String[]) field.get(null);
						map.put(field.getName(), value);
					}
				}
			}
		} catch (Exception e) {
		}
		return map;
	}

}
